开始之前:

1. 实例分割并输出相关数据

实例分割功能下,HUSKYLENS 2 可以识别图像中物体的类别并标记出每个物体的轮廓。可以使用程序打印出HUSKYLENS 2识别出的实例总数、靠近中心的实例和指定ID实例的名称、ID、中心点X、Y坐标以及物体的宽度和高度。

示例程序如下。

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *


u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_SEGMENT)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=110,font_size=18, color="#0000FF")
while True:
    huskylens.getResult(ALGORITHM_SEGMENT)
    if (huskylens.available(ALGORITHM_SEGMENT)):
        line1.config(text=(str("实例有:") + str((str((huskylens.getCachedResultNum(ALGORITHM_SEGMENT))) + str("个")))))
        line2.config(text=(str("靠近中心实例ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_SEGMENT).ID if huskylens.getCachedCenterResult(ALGORITHM_SEGMENT) else -1))))
        line3.config(text="识别第一个实例")
        line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1).xCenter if huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1) else -1)) + str((str(",") + str((huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1).yCenter if huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1) else -1))))))))

在Mind+中点击运行,等待程序上传完成后,HUSKYLENS 2自动进入实例分割功能,将HUSKYLENS 2的摄像头对准画面中的实例进行学习,如何学习实例详细操作请看:二哈识图 2 实例分割功能说明

学习完成后,对准该已学习过的实例,可在屏幕上观察输出结果。

**运行结果:**当程序上传成功后,HUSKYLENS 2会自动切换到实例分割功能下,将HUSKYLENS 2对准待识别的物体(必须是80类之中),观察出现识别到的实例数量、指定实例的ID、中心点坐标等数据。

Interface Diagram

2. 获取指定实例的相关数据

在实例分割功能下,HUSKYLENS 2 学习后,可获取画面中指定实例的相关数据。例如,判断某个已学习的实例是否在画面中、指定手实例的名称、同类实例的数量,当画面中出现多个相同类别是实例时,可指定获取其中某个实例的相关参数,包括名称、X/Y坐标、宽度、高度。

示例程序如下。

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *


u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_SEGMENT)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=110,font_size=18, color="#0000FF")
while True:
    huskylens.getResult(ALGORITHM_SEGMENT)
    if (huskylens.available(ALGORITHM_SEGMENT)):
        if ((huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1) is not None)):
            line1.config(text=(str("ID1实例总数为:") + str((str((huskylens.getCachedResultNumByID(ALGORITHM_SEGMENT, 1))) + str("个")))))
            line2.config(text=(str("ID1实例名称为:") + str((huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1).name if huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1) else -1))))
            line3.config(text="第1个ID1实例")
            line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_SEGMENT, 1, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_SEGMENT, 1, 1-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_SEGMENT, 1, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_SEGMENT, 1, 1-1) else -1))))))))


**运行结果:**当同一类别的多个实例出现在画面中时可以识别同一类别的实例的数量,输出指定实例的ID、中心点坐标、ID等相关数据。

Interface Diagram